import axios, {
    AxiosError,
    type InternalAxiosRequestConfig,
    type AxiosResponse,
} from 'axios';

// 创建 axios 实例
const service = axios.create({
    baseURL: '/dev-api', // 请替换为你的 API 基础地址
    timeout: 5000, // 设置请求超时时间（毫秒）
});

// 请求拦截器
service.interceptors.request.use(
    (config: InternalAxiosRequestConfig) => {
        // 在发送请求之前可以做一些处理，例如添加 token 到请求头
        const token = localStorage.getItem('token');
        if (token) {
            config.headers.Authorization = `Bearer ${token}`;
        }
        return config;
    },
    (error: AxiosError) => {
        // 处理请求错误
        return Promise.reject(error);
    }
);

// 响应拦截器
service.interceptors.response.use(
    (response: AxiosResponse) => {
        // 对响应数据进行处理，例如检查状态码
        if (response.status === 200) {
            return response.data;
        }
        return Promise.reject(response);
    },
    (error: AxiosError) => {
        // 处理响应错误，例如提示用户网络问题等
        if (error.response) {
            // 请求已发出，但服务器响应的状态码不在 2xx 范围内
            console.error('响应错误:', error.response.data);
            console.error('状态码:', error.response.status);
            console.error('响应头:', error.response.headers);
        } else if (error.request) {
            // 请求已发出，但没有收到响应
            console.error('请求错误:', error.request);
        } else {
            // 在设置请求时发生了一些错误
            console.error('设置请求错误:', error.message);
        }
        return Promise.reject(error);
    }
);

// 导出封装好的 axios 实例
export default service;
